﻿#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QTranslator>
#include <QApplication>
#include <QFileInfo>

//#include "ui/QSS/GlobalQss.h"
#include "ui/menuWidget/menuWidget.h"
#include "ui/optionWidget/optionWidget.h"
#include "ui/videoWidget/videoWidget.h"
#include "ENUM/enum.h"
#include "ui/SettingDialog/SettingDialog.h"

/*
 * 程序主界面框架的Widget（负责管理/调度menuWidget、optionWidget、videoWidget三个组件）
 */

class mainWidget : public QWidget
{
    Q_OBJECT

public:
    /**
     @interpret     初始化主窗口
     @param         tsor: 主程序使用的语言类型，showMode: 主程序使用的日/夜间模式
     */
    mainWidget(QApplication* a, Language tsor = Language::Chinese, ShowMode showMode = ShowMode::DAY, QWidget *parent = nullptr);
    ~mainWidget();
private:
    menuWidget*     m_Menu;                 // 窗口第一列按钮区域
    optionWidget*   m_Option;               // 窗口第二列选项功能区域
    videoWidget*    m_Video;                // 窗口第三列视频展示画面区域
    QHBoxLayout*    m_MainHLayout;          // 窗口主要布局
    SettingDialog*  m_SettingDialog;        // 相关设置的对话框
    QTranslator*    m_Tsor;                 // 翻译器
    QApplication*   m_A;                    // 当前程序的核心框架(主要用于设置翻译器)
private slots:
    /**
     @interpret     用于接收menuWidget子控件发送的点击按钮序号的信号
     @param         btn: 当前用户点击按钮的顺序
     */
    void menuWidgetClickedBtn(int btn);
    /**
     @interpret 根据传入的signalKind而去修改对应的数值
     @param  signalKind: 需要修改的参数类型; int: 修改为对应value值
     */
    void setValue(signalKind, int);
    /**
     @interpret     设置显示模式
     @param         showMode显示是白天还是黑夜
     @return        true-成功;false-失败
     */
    bool setShowModel(ShowMode showMode);

    /**
     @interpret     设置程序的语言版本（不清楚为什么存在bug: 第一次进行语言替换时不生效需要调用两次之后才正常（如果是构造时候调用两次，））
     @param         language: 对应语言版本
     */
    void setLanguage(Language language);
    void setLanguage1(Language lage);
};
#endif // WIDGET_H
